package ar.pegasus.clasificador.cargaDatos;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import ar.pegasus.clasificador.entidades.intermedio.DatosBaseExcel;
import ar.pegasus.clasificador.facade.api.CrudDatosBaseExcel;
import ar.pegasus.framework.componentes.PException;
import ar.pegasus.framework.util.log.PLogger;

public class BossDatosExcelExtractor {
	private static PLogger logger = new PLogger(BossDatosExcelExtractor.class);
	private static BossDatosExcelExtractor instance;
	
	public static BossDatosExcelExtractor getInstance() {
		if(instance == null)
			instance = new BossDatosExcelExtractor();
		return instance;
	}

	private BossDatosExcelExtractor(){
		
	}
	
	public List<DatosBaseExcel> extraerDatos(String nombrePartido) throws ClassNotFoundException, SQLException{
		List<DatosBaseExcel> filas = new ArrayList<DatosBaseExcel>();
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection con = DriverManager.getConnection("jdbc:odbc:" + nombrePartido );
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("Select * from [General$]");

//        ResultSetMetaData rsmd = rs.getMetaData();
//        int numberOfColumns = rsmd.getColumnCount();

        while (rs.next()) {
    		DatosBaseExcel datos = new DatosBaseExcel(rs);
    		filas.add(datos);
//            for (int i = 1; i <= numberOfColumns; i++) {
//                if (i > 1)
//                    System.out.print(", ");
//                String columnValue = rs.getString(i);
//                System.out.print(columnValue);
//            }
            System.out.println("");
        }
        st.close();
        con.close();
        return filas;
		
	}
	
	private void procesarDatos(List<DatosBaseExcel> filas) throws PException {
		int contador = 0;
		int totalProcesados = 0;
		System.out.println("Se van a procesar " + filas.size() + " filas.");
		for(DatosBaseExcel dato :filas){
			contador++;
			logger.info("grabando: " + dato.toString());
			System.out.println("grabando: " + dato.toString());
			CrudDatosBaseExcel.getInstance().grabar(dato);
			System.out.println("  --> Hecho.");
			logger.info("  --> Hecho.");
			if(contador>= 1){
				try {
					totalProcesados += contador;
					System.out.println("------> Procesados " + totalProcesados + "  --> Esperando.");
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				contador = 0;

			}
		}
		System.out.println("procesadas " + filas.size() + " filas.");

		
	}
	
	public void gestionarDatosBase(String nombre) throws ClassNotFoundException, SQLException, PException {
    	List<DatosBaseExcel> filas = extraerDatos(nombre);
    	procesarDatos(filas);
	}

}
